#pragma once

#include "iostream"
#include "vector"
#include "algorithm"
#include "TypeDefin.h"

using namespace std;

/*HJJ QQ479287006
给定一个二叉树，判断它是否是高度平衡的二叉树。

本题中，一棵高度平衡二叉树定义为：

一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1 。

 

示例 1：


输入：root = [3,9,20,null,null,15,7]
输出：true

来源：力扣（LeetCode）
链接：https://leetcode.cn/problems/balanced-binary-tree
著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
todo 这边引入了一个东西 深度和高度 ：深度指root到当前节点的高度 ， 高度指 当前节点到叶子节点的高度(当前子树的高度)
 * */

int maxDepth(TreeNode *root) {
    if (!root)
        return 0;
    int lef = maxDepth(root->left);
    int rig = maxDepth(root->right);

    if (lef > rig)
        return lef + 1;
    return rig + 1;
}

bool isBalanced(TreeNode *root) {
    if (!root)
        return true;

    if (abs(maxDepth(root->left) - maxDepth(root->right)) > 1)
        return false;
    return isBalanced(root->left) && isBalanced(root->right);

}
//那个pdf 有点些许的减脂操作吧 。效率也许好点